# Copyright 2023 Ant Group Co., Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

package(default_visibility = ["//visibility:public"])

proto_library(
    name = "mux_receiver_proto",
    srcs = ["mux_receiver.proto"],
)

cc_proto_library(
    name = "mux_receiver_cc_proto",
    deps = [":mux_receiver_proto"],
)

cc_library(
    name = "channel_manager",
    srcs = ["channel_manager.cc"],
    hdrs = ["channel_manager.h"],
    deps = [
        "@com_github_brpc_brpc//:brpc",
        "@com_github_gabime_spdlog//:spdlog",
        "@com_google_absl//absl/strings",
        "@yacl//yacl/base:exception",
    ],
)

cc_library(
    name = "rpc_helper",
    srcs = ["rpc_helper.cc"],
    hdrs = ["rpc_helper.h"],
    deps = [
        ":mux_receiver_cc_proto",
        "@com_github_brpc_brpc//:brpc",
        "@com_github_gabime_spdlog//:spdlog",
    ],
)

cc_test(
    name = "rpc_helper_test",
    srcs = ["rpc_helper_test.cc"],
    deps = [
        ":rpc_helper",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_library(
    name = "listener",
    srcs = ["listener.cc"],
    hdrs = ["listener.h"],
    deps = [
        ":mux_receiver_cc_proto",
        "@yacl//yacl/link/transport:channel",
    ],
)

cc_test(
    name = "listener_test",
    srcs = ["listener_test.cc"],
    # add -lm for channel_mem
    linkopts = ["-lm"],
    deps = [
        ":listener",
        "@com_google_googletest//:gtest_main",
        "@yacl//yacl/link/transport:channel_mem",
    ],
)

cc_library(
    name = "mux_receiver_service",
    srcs = ["mux_receiver_service.cc"],
    hdrs = ["mux_receiver_service.h"],
    deps = [
        ":listener",
        ":mux_receiver_cc_proto",
        "@com_github_brpc_brpc//:brpc",
    ],
)

cc_test(
    name = "mux_receiver_service_test",
    srcs = ["mux_receiver_service_test.cc"],
    deps = [
        ":mux_link_factory",
        ":mux_receiver_service",
        "@com_google_googletest//:gtest_main",
        "@yacl//yacl/link",
    ],
)

cc_library(
    name = "mux_link_factory",
    srcs = ["mux_link_factory.cc"],
    hdrs = ["mux_link_factory.h"],
    deps = [
        ":channel_manager",
        ":listener",
        ":mux_receiver_cc_proto",
        "@com_github_brpc_brpc//:brpc",
        "@yacl//yacl/link:factory",
    ],
)

# FIXME(shunde.csd): Add mux_link_factory_test back
# cc_test(
#     name = "mux_link_factory_test",
#     srcs = ["mux_link_factory_test.cc"],
#     deps = [
#         ":mux_link_factory",
#         "@com_google_googletest//:gtest_main",
#     ],
# )
